package com.lsnu.ehr.jpa;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import com.lsnu.ehr.entity.Probation;

// JpaRepository jpa操作接口，定义了常用的增删查改方法
// 泛型<Post, Long> 指定操作类和类的主键类型
// JpaRepository 接口不需要实现就可以对实体类进行增删查改
// springjpa 框架会代理接口方法进行实现

public interface ProbationRepository extends JpaRepository<Probation, Long>,JpaSpecificationExecutor<Probation> {
	
	/**
	 * 根据员工  id  和  试用状态  查询员工的试用期表
	 * @param id
	 * @param status
	 * @return
	 */
	@Query(value = "SELECT * FROM t_probation INNER JOIN t_emp ON t_probation.pro_emp_id = t_emp.id where t_emp.id=?1 And t_probation.status=?2", nativeQuery = true)
	List<Probation> findProByIdAndStatus(Long id, String status);
	
	/**
	 * 根据员工  姓名  和   试用状态  模糊 分页查询试用期状态！
	 * 其中like为模糊查询 limit 0,5 指从第0条数据   开始    显示，共显示5条 
	 * @param empName		emp姓名
	 * @param status		状态
	 * @param page
	 * @param pageLength
	 * @return
	 */
	@Query(value = "SELECT * FROM t_probation INNER JOIN t_emp ON t_probation.pro_emp_id = t_emp.id where t_emp.emp_name like %?1% And t_probation.status=?2 limit ?3,?4", nativeQuery = true)
	List<Probation> findProByNameAndStatus(String empName, String status, Integer page,Integer pageLength);
	@Query(value = "SELECT count(*) FROM t_probation INNER JOIN t_emp ON t_probation.pro_emp_id = t_emp.id where t_emp.emp_name like %?1% And t_probation.status=?2", nativeQuery = true)
	Long findProCountByNameAndStatus(String empName, String status);
	
	/**
	 * 根据试用状态进行查询
	 * 利用JpaSpecificationExecutor接口来进行简单的分页查询
	 * @param page  
	 * @param status
	 * @return
	 */
	Page<Probation> findByStatus(Pageable page,String status);
	
	/**
	 * 获取总条数
	 * @param beginDate
	 * @param endDate
	 * @return
	 */
	@Query(value = "select count(*) from t_probation where begin_date>=?1 and begin_date<?2", nativeQuery = true)
	Long findByDateCount(String beginDate, String endDate);
	/**
	 * 根据时间区域对试用期信息进行查询
	 * @param beginDate  开始时间
	 * @param endDate	末尾时间
	 * @param page		当前页数
	 * @param pageLength	一页最大显示数
	 * @return
	 */
	@Query(value = "select * from t_probation where begin_date>=?1 and begin_date<?2 limit ?3,?4", nativeQuery = true)
	List<Probation> findByDate(String beginDate, String endDate, Integer page, Integer pageLength);
}
